約 2,614,732 件
https://w.atwiki.jp/dendenkeroro/pages/52.html
ARToolkitを実現するにはOpenGLも習得しておく必要があります。 各種要素となるプログラムソースを公開しておきます。 開発環境はARToolkitを参照してください。 プログラミングに関してはARToolkitでも紹介した書籍、 および下記HP「NaturalScience」様を参考にしております。 そちらではソースの解説があまりないので、必要に応じて補足、コメントなどしています。 ただし、読者の方々にはC言語に関する基礎知識があるものとして説明しております。 (c)NaturalScience VisualStudio2010ではどう設定するの? VisualStudio2010が公開されましたね。2008とは若干仕様が変わりましたので、それを紹介します。 まずGLUTのインストールですが、glut.hをどこに置くかが問題になります。アドレスは以下の通り。 C \Program Files\Microsoft Visual Studio 10.0\Vc\Include\gl\glut.h glフォルダはデフォルトで存在しないので、自分で作ってください。 また、2010ではプロジェクトでのプロパティ設定のみとなっているので、 「インクルードディレクトリ」と「ライブラリディレクトリ」は「プロジェクトのプロパティ」から設定してください。 「VC++ディレクトリ」という項目が2010では新設されておりますので。 とりあえずWindowを表示してみよう(2010/5/5 編集中) まずはOpenGLでウィンドウを表示してみましょう。 かといって真っ白画面だと味気ないので、格子状の地面も表示します。 +←ソースを表示するにはこちらをクリック #include ‹math.h› #include ‹fstream› #include ‹sstream› #include ‹iostream› #include ‹direct.h› #include ‹GL/glut.h› int WindowPositionX = 400; //生成するウィンドウ位置のX座標 int WindowPositionY = 200; //生成するウィンドウ位置のY座標 int WindowWidth = 640; //生成するウィンドウの幅 int WindowHeight = 480; //生成するウィンドウの高さ char WindowTitle[] = ロボット視点 ; //ウィンドウのタイトル double ViewPointX = 0.0;//視点X座標 double ViewPointY = -300.0;//視点Y座標 double ViewPointZ = 50.0;//視点Z座標 //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); void Idle(); void Ground(void); //地面の描画Keyboard //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) glutIdleFunc(Idle); //プログラムアイドル状態時に呼び出される関数 Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(1.0, 1.0, 1.0, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 //透視変換行列の設定------------------------------ glMatrixMode(GL_PROJECTION);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 gluPerspective(30.0, (double)WindowWidth/(double)WindowHeight, 0.1, 1000.0); //透視投影法の視体積gluPerspactive(th, w/h, near, far); //視点の設定------------------------------ gluLookAt( ViewPointX, ViewPointY, ViewPointZ, // 視点の位置x,y,z; 0.0, 0.0, ViewPointZ, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0 ) ; //視界の上方向のベクトルx,y,z //---------------------------------------- //モデルビュー変換行列の設定-------------------------- glMatrixMode(GL_MODELVIEW);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 glViewport(0, 0, WindowWidth, WindowHeight); //---------------------------------------------- glEnd(); glPopMatrix(); Ground();//地面描画 glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } //---------------------------------------------------- // アイドル時に呼び出される関数 //---------------------------------------------------- void Idle(){ glutPostRedisplay(); //glutDisplayFunc()を1回実行する } //---------------------------------------------------- // 地面の描画(格子) //---------------------------------------------------- void Ground(void){ double ground_max_x = 500.0;//x方向広さ double ground_max_y = 500.0;//y方向広さ glColor3d(0.5, 0.5, 1.0); // 大地の色 glBegin(GL_LINES); for(double ly = -ground_max_y ;ly = ground_max_y; ly+=10.0){ glVertex3d(-ground_max_x, ly,0); glVertex3d(ground_max_x, ly,0); } for(double lx = -ground_max_x ;lx = ground_max_x; lx+=10.0){ glVertex3d(lx, ground_max_y,0); glVertex3d(lx, -ground_max_y,0); } glEnd(); } 下のようなウィンドウが実行されたでしょうか? 真っ白なウィンドウを表示するだけなら↓のソースで可能です。 +←表示するにはこちらをクリック #include ‹GL/glut.h› int WindowPositionX = 100; //生成するウィンドウ位置のX座標 int WindowPositionY = 100; //生成するウィンドウ位置のY座標 int WindowWidth = 512; //生成するウィンドウの幅 int WindowHeight = 512; //生成するウィンドウの高さ char WindowTitle[] = 世界の始まり ;//ウィンドウのタイトル //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(1.0, 1.0, 1.0, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } ここでのキーワードは以下の通りです。 プログラムの全体的流れの把握 視点という概念 地面の描写 地面の上に立方体を表示して、視点を変えてみよう(2010/5/5 編集中) 地面だけでは味気ないですね。さて、実際に物体、ここでは立方体を描写しましょう。 ソースはこちらです。 下のようなウィンドウが実行されたでしょうか? ここでのキーワードは以下の通りです。 視点の移動 オブジェクトの描画 マウスドラッグで立方体をグリグリ回してみよう(2010/5/5 編集中) キーボード入力をしてみよう(2010/5/5 編集中) ここではキーボードからの入力によって視点(ViewPoint)を変えてみましょう。 下記のソースを実行すると下図のようなウィンドウが開きます。 キー操作は「a,s,d,wがそれぞれ左、下、右、上」「qが終了」となっています。 +←ソースを表示するにはこちらをクリック #include ‹math.h› #include ‹fstream› #include ‹sstream› #include ‹iostream› #include ‹direct.h› #include ‹GL/glut.h› double PI = acos(-1.0); int WindowPositionX = 400; //生成するウィンドウ位置のX座標 int WindowPositionY = 200; //生成するウィンドウ位置のY座標 int WindowWidth = 640; //生成するウィンドウの幅 int WindowHeight = 480; //生成するウィンドウの高さ char WindowTitle[] = ロボット視点ぐりぐり ; //ウィンドウのタイトル double ViewPointX = 0.0; double ViewPointY = -200.0; double ViewPointZ = 50.0; int tn = 0,zn=50 ; double t = 0; double dt = 0.1; double omega = 2.0 * PI / 20.0; //---------------------------------------------------- // 立方体の定義 //---------------------------------------------------- GLdouble vertex[][3] = { { -10.0, -10.0, 0.0 }, { 10.0, -10.0, 0.0 }, { 10.0, 10.0, 0.0 }, { -10.0, 10.0, 0.0 }, { -10.0, -10.0, 20.0 }, { 10.0, -10.0, 20.0 }, { 10.0, 10.0, 20.0 }, { -10.0, 10.0, 20.0 } },; int face[][4] = {//面の定義 { 0, 1, 2, 3 }, { 1, 5, 6, 2 }, { 5, 4, 7, 6 }, { 4, 0, 3, 7 }, { 4, 5, 1, 0 }, { 3, 2, 6, 7 }, } GLdouble normal[][3] = {//面の法線ベクトル { 0.0, 0.0,-1.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 }, {-1.0, 0.0, 0.0 }, { 0.0,-1.0, 0.0 }, { 0.0, 1.0, 0.0 }, } //---------------------------------------------------- // 物質質感の定義 //---------------------------------------------------- struct MaterialStruct { GLfloat ambient[4]; GLfloat diffuse[4]; GLfloat specular[4]; GLfloat shininess; } //jade(翡翠) MaterialStruct ms_jade = { {0.135, 0.2225, 0.1575, 1.0}, {0.54, 0.89, 0.63, 1.0}, {0.316228, 0.316228, 0.316228, 1.0}, 12.8} //---------------------------------------------------- // 色の定義の定義 //---------------------------------------------------- GLfloat green[] = { 0.2, 0.8, 0.2, 1.0 }//緑色 GLfloat shininess = 30.0;//光沢の強さ //----------------------------------------- //---------------------------------------------------- // 関数プロトタイプ(後に呼び出す関数名と引数の宣言) //---------------------------------------------------- void Initialize(void); void Display(void); void Idle(); void Ground(void); //大地の描画 void Keyboard(unsigned char key, int x, int y); //---------------------------------------------------- // メイン関数 //---------------------------------------------------- int main(int argc, char *argv[]){ glutInit(&argc, argv);//環境の初期化 glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定 glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定 glutCreateWindow(WindowTitle); //ウィンドウの作成 glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display) glutKeyboardFunc(Keyboard);//キーボード入力時に呼び出される関数を指定する(関数名:Keyboard) glutIdleFunc(Idle); //プログラムアイドル状態時に呼び出される関数 Initialize(); //初期設定の関数を呼び出す glutMainLoop(); return 0; } //---------------------------------------------------- // 初期設定の関数 //---------------------------------------------------- void Initialize(void){ glClearColor(0.6, 0.6, 0.9, 1.0); //背景色 glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する //光源の設定-------------------------------------- GLfloat light_position0[] = { -50.0, -50.0, 20.0, 1.0 }//光源0の座標 glLightfv(GL_LIGHT0, GL_POSITION, light_position0); //光源0を } //---------------------------------------------------- // 描画の関数 //---------------------------------------------------- void Display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去 t = dt * tn;//tnは後ほどインクリメントされる ViewPointX = -100.0 * cos( omega * t);//立方体の周りをぐるぐる視点が回転する ViewPointY = -100.0 * sin( omega * t);//Z軸方向から見ると回転運動 ViewPointZ = 50+zn; //Z軸方向から見ると回転運動 //透視変換行列の設定------------------------------ glMatrixMode(GL_PROJECTION);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 gluPerspective(30.0, (double)WindowWidth/(double)WindowHeight, 0.1, 1000.0); //透視投影法の視体積gluPerspactive(th, w/h, near, far); //視点の設定------------------------------ gluLookAt( ViewPointX, ViewPointY, ViewPointZ, // 視点の位置x,y,z; 0.0, 0.0, 0.0, // 視界方向 0.0, 0.0, 1.0 ) ; //重力方向、要するに「上・空」はどっち? //---------------------------------------- //モデルビュー変換行列の設定-------------------------- glMatrixMode(GL_MODELVIEW);//行列モードの設定(GL_PROJECTION 透視変換行列の設定、GL_MODELVIEW:モデルビュー変換行列) glLoadIdentity();//行列の初期化 glViewport(0, 0, WindowWidth, WindowHeight); //---------------------------------------------- //陰影ON----------------------------- glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);//光源0を利用 //----------------------------------- //立方体 glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, ms_jade.ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_jade.diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, ms_jade.specular); glMaterialfv(GL_FRONT, GL_SHININESS, &ms_jade.shininess); glTranslated(0.0, 0.0, 0.0);//平行移動値の設定 glBegin(GL_QUADS); for (int j = 0; j 6; ++j) { glNormal3dv(normal[j]); //法線ベクトルの指定 for (int i = 0; i 4; ++i) { glVertex3dv(vertex[face[j][i]]); } } glEnd(); glPopMatrix(); //陰影OFF----------------------------- glDisable(GL_LIGHTING); //----------------------------------- Ground(); glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可 } //---------------------------------------------------- // アイドル時に呼び出される関数 //---------------------------------------------------- void Idle(){ glutPostRedisplay(); //glutDisplayFunc()を1回実行する } //---------------------------------------------------- // 地面の描画 //---------------------------------------------------- void Ground(void){ double ground_max_x = 500.0; double ground_max_y = 500.0; glColor3d(0.8, 0.8, 0.8); // 大地の色 glBegin(GL_LINES); for(double ly = -ground_max_y ;ly = ground_max_y; ly+=10.0){ glVertex3d(-ground_max_x, ly,0); glVertex3d(ground_max_x, ly,0); } for(double lx = -ground_max_x ;lx = ground_max_x; lx+=10.0){ glVertex3d(lx, ground_max_y,0); glVertex3d(lx, -ground_max_y,0); } glEnd(); } //---------------------------------------------------- // キーボード入力時に呼び出される関数 //---------------------------------------------------- void Keyboard(unsigned char key, int x, int y){ switch ( key ) { case a //「a」を押したら反時計回り tn--; break; case d //「d」を押したら時計回り tn++; break; case w //「w」を押したら視点上昇 zn++; break; case s //「s」を押したら視点下降 zn--; break; case q //「q」を押したら終了 exit(0); break; default break; } } 文字の表示をしてみよう(2010/5/5 編集中) ウィンドウ映像をビットマップで紙芝居的に保存しよう(2010/5/5 編集中) ゲームパッド(コントローラ)で入力してみよう(2010/5/5 編集中) 半透明な物体を表現してみよう(2010/5/5 編集中) 動く笑い男を表示してみよう(2010/5/5 編集中)
https://w.atwiki.jp/bambooflow/pages/276.html
OpenGL2.x OpenGL2.x系の処理を記載する。 バッファオブジェクトが導入されたバージョン。 また最終的にGLSLはサポートされる。
https://w.atwiki.jp/bambooflow/pages/275.html
OpenGL1.x OpenGL1.x系の処理を記載する。 立方体の描画 テクスチャマッピング Quaternionによる回転 地面 ポリゴン上の線描画 カメラの設定 球体の表示 ポリゴン面の表と裏 影行列 行と列 ステンシルバッファ メモ
https://w.atwiki.jp/gametips/pages/22.html
更新日時 2013-06-16 00 05 24 (Sun)アクセス数 - OpenGL サンプルコード 概要 OpenGL のサンプルコードを掲載しています。 OpenGL C++ プログラム 頂点属性をシェーダに出力 頂点インデックスを指定してレンダリング インタリーブ配列を利用したレンダリング OpenGL 頂点シェーダ はじめての頂点シェーダ レイアウト修飾子による属性インデックスの指定 OpenGL フラグメントシェーダ はじめてのフラグメントシェーダ レイアウト修飾子による色番号の指定 参考文献 OpenGLに関連するオススメの本や WEB サイトを紹介します. ページ右の画像をクリックすると Amazon で参考文献を購入できます. OpenGL策定委員会, 「OpenGLプログラミングガイド 原著第5版」, ピアソンエデュケーション OpenGLの赤本(Red Book)と呼ばれる定番の参考書の日本語版です。 少し値は張りますがOpenGLの基本的な使い方が丁寧にまとめられています。 初心者の方には敷居が高いかもしれませんがOpenGLを極めるつもりなら必須の教本だと思います。 Mark Segal, Kurt Akeley, Jon Leech, 「OpenGL4.0グラフィックスシステム」, カットシステム OpenGLの仕様書の日本語訳です。個人的には翻訳に違和感を覚えることはありませんでした。 英語が苦手な方は本書をAPIリファレンスの代わりに利用できます。 チュートリアルのような内容は含まれていませんので他の書籍との併用をオススメします。 床井 浩平, 「GLUTによるOpenGL入門」, 工学社 これから OpenGL を初めようとしている方にはこの本がオススメです。 おそらく OpenGL に関する文献の中では最も敷居が低く 3DCG に関する知識が全くなくても理解しやすいです。 少し内容は古いかもしれませんが導入という目的では最高の文献で、私もこの本から OpenGL に入門しました。 床井 浩平, 「GLUTによるOpenGL入門2 テクスチャマッピング」, 工学社 上の「GLUT によるOpenGL入門」の続編です。 前作の内容では物足りなかった方は本書を読むことで 3DCG の表現力が大幅に広がります。 引き続き平易な内容となっており、前作を読破した方であれば難なく理解できると思います。 David Wolff , 「OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング-」, ボーンデジタル 最近のゲームに見られるようなリアルな映像をつくりだすにはプログラマブル・シェーダという機能が欠かせません。 床井 浩平さんの「GLUTによるOpenGL入門2 テクスチャマッピング」でもシェーダに関しては少しだけ触れられていますが、書籍の後半で軽く紹介されているだけでいささか物足りない内容ではありますので、本格的に学ぶためにこの本の購入をオススメします。 質問・コメント欄 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/bokuyo/pages/181.html
OpenGL ES 2.0 http //www.khronos.org/opengles/2_X/
https://w.atwiki.jp/bambooflow/pages/288.html
gl3w gl3wは、OpenGL3/4のcore profileが提供する機能を手に入れるための最も簡単な方法。 以下のサイトから https //github.com/skaslev/gl3w ダウンロード % git clone https //github.com/skaslev/gl3w.git gl3wをテストする % cd gl3w % ./gl3w_gen.py すると、srcディレクトリにgl3w.cファイルが生成される。 % cd src % gcc -o test test.c gl3w.c -I../include -lglut 実行する。 % ./test 実行がうまくいくと、ランダム(randf)でチカチカする画面が表示される。 サンプル #include stdio.h #include GL3/gl3w.h #include GL/glut.h // ... int main(int argc, char **argv) { glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(width, height); glutCreateWindow("cookie"); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutSpecialFunc(special); glutMouseFunc(mouse); glutMotionFunc(motion); if (gl3wInit()) { fprintf(stderr, "failed to initialize OpenGL\n"); return -1; } if (!gl3wIsSupported(3, 2)) { fprintf(stderr, "OpenGL 3.2 not supported\n"); return -1; } printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION)); // ... glutMainLoop(); return 0; } メモ 現状Linuxの環境で動かそうとしたとき、原因不明のSegmentation Fault.が発生した。 原因は、gl3wInit()を呼ぶ前に、glGetString(GL_VERSION)を呼んだことだった。 glewと挙動が異なったため、少しハマってしまった。。
https://w.atwiki.jp/bambooflow/pages/251.html
BuGLe BuGLe(ビューグル)はOpenGLのデバッガ。 なかなか説明しているページが見つからない。 簡単な使い方をメモすることにしました。 使いこなせれば、なかなか便利なのかもしれません。 BuGLeインストール準備エラー対策 gldb-gui使い方 メモbugleの準備 gldb-gui実行 参考 インストール準備 http //sourceforge.net/projects/bugle/ bugle-0.0.20091026.tar.bz2 $ tar jzf bugle-0.0.20091026.tar.bz2 libreadline-dev libgtk-dev libgtkglext1-dev libgtkglextmm-x11-1.2-dev libavcodec-extra-52 libdlna-dev ↑足りる? $ ./configure 次のようになるように必要なライブラリをインストールしておく。 Configuration API combination gl-glx libavcodec yes readline yes GUI yes (with OpenGL) event interception yes $ make $ sudo make install エラー対策 実行時、次のエラーが出る。 *** %n in writable segment detected *** Aborted 次のようにインストールする $ ./configure CFLAGS=-D_FORTIFY_SOURCE=1 $ make $ sudo make install gldb-gui使い方 メモ gldb-guiは、bugleのGUIフロントエンド。(たぶん) bugleの準備 bugleを使うにはfilter-set chainというのを用意しないといけないようです。 普通にコンパイルすると、$HOME/.bugle/filtersというファイルを探します。 とりえず、exampleのものを使います。 $ cd bugle-0.0.20091026/doc/examples $ ls filters statistics $ mkdir $HOME/.bugle $ cp -p filters statistics $HOJME/.bugle 準備完了です。 filtersとstatisticsファイルは、工夫次第でいろいろできそうです。 gldb-gui実行 試しに、glxgearsをデバッグしてみる。 $ gldb-gui glxgears RUN- RUN RUN- STOP どう使うのかはここでは省略。 (ステップ実行とかもできそうです。) 一旦、実行を停止します。 RUN- Kill (もしくはglxgearsウィンドウの×ボタンを押す) 次にFilter-set chainを使ってみます。 今回はステータス表示させます。 Options- Target Filter Scanに"showstats"を書き込んでOKを押す。 再度、実行してみます。 RUN- RUN 実行画面に、ステータス(デバッグ)表示されたと思います。 これは、次の実行と同じ実行結果になります。 $ BUGLE_CHAIN=showstats LD_PRELOAD=libbugle.so glxgears 参考 http //www.opengl.org/sdk/tools/BuGLe/documentation/index.php http //www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html
https://w.atwiki.jp/bambooflow/pages/286.html
SDL - Simple DirectMedia Layer SDL - Simple DirectMedia LayerDownload Compile cmake準備 Empty Project 表示 参考 Download Compile % sudo apt-get install libsdl1.2-dev http //www.libsdl.org/ SDL.lib SDLmain.lib opengl32.lib g++ `sdl-config --cflags --libs` -lGL sample.cpp -o sample cmake準備 CMakeLists.txt # # CMakeFileLists.txt # # cmake . # # 要求するCMakeのバージョン cmake_minimum_required(VERSION 2.6) # build type set(CMAKE_BUILD_TYPE DEBUG) # compile option (DEBUG) set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall") set(CMAKE_C_FLAGS_DEBUG "-g -Wall") # compile option (Release) set(CMAKE_CXX_FLAGS_RELEASE "-Wall -O3") set(CMAKE_C_FLAGS_RELEASE "-Wall -O3") # インストール先 # CMAKE_INSTALL_PREFIX(...) ############################################################ set(PROJ_NAME run.x) set(TARGET ${PROJ_NAME}) set(SDL_PATH /usr) # プロジェクト名 project(${PROJ_NAME}) # インクルードパスの追加 include_directories(${SDL_PATH}/include) # ライブラリパスの追加 link_directories(${SDL_PATH}/lib) # 実行ファイルとソースファイル群 add_executable(${TARGET} main.cpp) # ライブラリ target_link_libraries(${TARGET} SDL GL GLU) # マクロ設定 [-D] #add_definitions(-D) Empty Project main.cpp #include cstdio #include cstdlib #include iostream #include SDL/SDL.h #include SDL/SDL_opengl.h #include GL/gl.h #include GL/glu.h static bool initSDL(int width, int height); static void initGL(); static void reshape(GLsizei w, GLsizei h); static void process_events(); static void draw(); bool initSDL(int width, int height) { const SDL_VideoInfo* info; const SDL_Surface *surf; int bpp = 0; if (SDL_Init(SDL_INIT_VIDEO) 0) { std cerr "Video initialization Failed " SDL_GetError() "\n"; SDL_Quit(); return false; } info = SDL_GetVideoInfo(); if (!info) { std cerr "Video query failed " SDL_GetError() "\n"; } bpp = info- vfmt- BitsPerPixel; SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,8); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); //atexit(SDL_Quit); surf = SDL_SetVideoMode(width, height, bpp, SDL_OPENGL|SDL_RESIZABLE); if (!surf) { std cerr SDL_GetError() "\n"; SDL_Quit(); return false; } reshape(width, height); return true; } void initGL() { glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); } void reshape(GLsizei w, GLsizei h) { glViewport(0, 0, w, h); glOrtho(0.0, w, h, 0.0, -1.0, 1.0); } void process_events() { SDL_Surface *surf; SDL_Event event; while (SDL_PollEvent( event)) { switch (event.type) { case SDL_QUIT std exit(1); break; case SDL_KEYDOWN switch (event.key.keysym.sym) { case SDLK_ESCAPE std exit(0); break; default break; } break; case SDL_VIDEORESIZE SDL_FreeSurface(surf); surf = SDL_SetVideoMode(event.resize.w, event.resize.h, 32, SDL_OPENGL|SDL_RESIZABLE); reshape(static_cast GLsizei (event.resize.w), static_cast GLsizei (event.resize.h)); break; } } } void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glLoadIdentity(); // 四角形を描く glBegin(GL_QUADS); { glColor3f(1.0, 1.0f, 1.0); // white // 4つの頂点を指定 glVertex3f(100.0f, 100.0f, 0); glVertex3f(540.0f, 100.0f, 0); glVertex3f(540.0f, 380.0f, 0); glVertex3f(100.0f, 380.0f, 0); } glEnd(); SDL_GL_SwapBuffers(); } int main(int argc, char* argv[]) { if (!initSDL(640, 480)) { std exit(1); } // initialize OpenGL initGL(); // simLoop while (true) { process_events(); draw(); } return 0; } 表示 参考 http //www.tacoworks.jp/software/SDLdoc-jp/html/index.html
https://w.atwiki.jp/nina_a/pages/28.html
カテゴリ「OpenGL」に属するページ一覧 OpenGL/テクスチャ
https://w.atwiki.jp/cglab/pages/13.html
JOGL Java OpenGLに関する情報 eclipseへのJOGLのインストール http //mail2.nara-edu.ac.jp/~asait/open_gl/Jogl/jogl.htm JOGLのAPIリファレンス http //g-p-k.no-ip.org/java/jogl/overview-summary.html